﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SIM.Geo.BE;
using SIM.Geo.BL;
 
using System.IO;
using System.Drawing;

namespace MC.SMC.UI.Lab
{
    public partial class frmLaborMinera : PaginaBase
    {

        #region Variables

        private string Galeria = "GAL";
        private string Rampa = "RMP";
        private string Crucero = "XCR";
        private string Subnivel = "SBN";
        private string Ventana = "VTN";
        private string Estocada = "EST";
        private string Tajo = "TAJ";
        private string Chimenea = "CHI";
        private string Norte = "N";
        private string Este = "E";
        private string Oeste = "W";
        private string Sur = "S";

        #endregion

        #region Eventos

        public override void VerifyRenderingInServerForm(Control control)
        {
            /* Confirms that an HtmlForm control is rendered for the specified ASP.NET
               server control at run time. */
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            btnAgregarLaborMinera.Attributes.Add("onclick", "return confirm('¿Está seguro de guardar el registro?');");
            lblNavegacion.Text = "Geologia > Labor Minera";
            if (!Page.IsPostBack)
            {
                LaborMineraListar();
                CategoriaListar();
                TipoLaborListar();
                DireccionListar();
                ZonaListar();
                CuerpoListar();
                LaborConsulta();
            }
        }

        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            LaborMineraListar();
        }

        protected void gvLaborMinera_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvLaborMinera.PageIndex = e.NewPageIndex;
            LaborMineraListar();
        }

        protected void gvLaborMinera_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                string key = gvLaborMinera.DataKeys[e.Row.RowIndex].Value.ToString();
                e.Row.Attributes.Add("id", key);
            }
        }

        protected void btnValidar_Click(object sender, EventArgs e)
        {
            //if (!RevisarSumasSegmentos()) return;
            //if (RevisarConsistenciaSegmentos()) return;
            //hdValidado.Value = "1";
        }

        protected void btnRegistrar_Click(object sender, EventArgs e)
        {
            LimpiarFormulario();

            hdCodigoLabor.Value = "0";

            AbrirPopup("addModal");
        }

        protected void btnActualizar_Click(object sender, EventArgs e)
        {

            string _codigoMuestraSondaje = hdCodigoLabor.Value == "0" ? string.Empty : hdCodigoLabor.Value;

            if (string.IsNullOrEmpty(_codigoMuestraSondaje)) return;

            var oBLLabor = new BLLabor();
            var oBELabor = oBLLabor.LaborLeer(new BELabor
            {
                CodigoLabor = _codigoMuestraSondaje
            });

            if (oBELabor != null)
            {
                txtNombreLaborPopup.Text = oBELabor.Nombre;
                ddlCategoria.SelectedValue = oBELabor.CodigoCategoriaLabor.ToString();
                ddlTipoLabor.SelectedValue = oBELabor.CodigoTipoLabor.ToString();
                txtNivel.Text = oBELabor.Nivel.ToString();
                txtSeccion.Text = oBELabor.Seccion.ToString();
                ddlDireccion.SelectedValue = oBELabor.CodigoDireccion.ToString();
                ddlZona.SelectedValue = oBELabor.CodigoZona.ToString();
                ddlCuerpo.SelectedValue = oBELabor.CodigoCuerpo.ToString();
            }

            AbrirPopup("addModal");
        }

        protected void btnEliminar_Click(object sender, EventArgs e)
        {

            string _codigoLabor = hdCodigoLabor.Value == "0" ? string.Empty : hdCodigoLabor.Value;
            var oBLLabor = new BLLabor();

            if (string.IsNullOrEmpty(_codigoLabor)) return;

            if (!string.IsNullOrEmpty(hdCodigoLabor.Value))
            {
                oBLLabor.LaborEliminar(new BELabor
                {
                    CodigoLabor = _codigoLabor
                });

                LaborMineraListar();
                LimpiarFormulario();
                hdCodigoLabor.Value = "0";
                Postback();
            }
        }

        protected void btnAgregarLaborMinera_Click(object sender, EventArgs e)
        {
            string _validacion = Validar();
            if (_validacion == string.Empty)
            {
                var oBLLabor = new BLLabor();
                var oBELabor = new BELabor
                {
                    Nombre = txtNombreLaborPopup.Text.Trim(),
                    CodigoLabor = hdCodigoLabor.Value,
                    CodigoCategoriaLabor = Convert.ToInt32(ddlCategoria.SelectedValue),
                    CodigoTipoLabor = Convert.ToInt32(ddlTipoLabor.SelectedValue),
                    Nivel = txtNivel.Text,
                    Seccion = Convert.ToInt32(txtSeccion.Text),
                    CodigoDireccion = Convert.ToInt32(ddlDireccion.SelectedValue),
                    CodigoZona = Convert.ToInt32(ddlZona.SelectedValue),
                    CodigoCuerpo = Convert.ToInt32(ddlCuerpo.SelectedValue)
                };

                oBLLabor.LaborGrabar(oBELabor);
                LaborMineraListar();
                LimpiarFormulario();
                Postback();

                MostrarMensaje("Labor Minera grabada con éxito.");
                OcultarPopup("addModal");
            }
            else
            {
                MostrarMensaje(_validacion);
            }
        }

        protected void btnFiltrar_Click(object sender, EventArgs e)
        {
            AbrirPopup("showBuscar");
        }

        protected void btnBuscadorLabor_Click(object sender, EventArgs e)
        {
            LaborConsulta();
        }

        protected void gvConsulta_RowDataBound(object sender, GridViewRowEventArgs e)
        {

        }

        protected void gvConsulta_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvConsulta.PageIndex = e.NewPageIndex;
            LaborConsulta();
        }

        protected void btnAceptarConsulta_Click(object sender, EventArgs e)
        {

        }

        protected void gvConsulta_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Seleccionar")
            {
                txtNombreLabor.Text = e.CommandArgument.ToString();
                updNombre.Update();
                OcultarPopup("showBuscar");
            }
        }

        protected void btnExportar_Click(object sender, EventArgs e)
        {
            Exportar();
        }

        protected void ddlTipoLabor_SelectedIndexChanged(object sender, EventArgs e)
        {
            txtNombreLaborPopup.Text = GenerarNombreLabor();
        }

        protected void ddlDireccion_SelectedIndexChanged(object sender, EventArgs e)
        {
            txtNombreLaborPopup.Text = GenerarNombreLabor();
        }

        protected void txtSeccion_TextChanged(object sender, EventArgs e)
        {
            txtNombreLaborPopup.Text = GenerarNombreLabor();
        }

        protected void txtNivel_TextChanged(object sender, EventArgs e)
        {
            txtNombreLaborPopup.Text = GenerarNombreLabor();
        }

        protected void btnSalir_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/default.aspx");
        }

        #endregion

        #region Metodos

        private void LaborMineraListar()
        {
            var oBLLabor = new BLLabor();
            var oListaLaborMinera = oBLLabor.LaborBuscar(new BELabor
            {
                Nombre = txtNombreLabor.Text.Trim()
            });
            ControlDataBind(oListaLaborMinera, gvLaborMinera);
        }

        private void LaborConsulta()
        {
            var oBLLabor = new BLLabor();
            var oListaLaborMinera = oBLLabor.LaborConsulta(new BELabor { Nombre = txtNombreBuscador.Text.Trim() });
            ControlDataBind(oListaLaborMinera, gvConsulta);
        }

        private void Postback()
        {
            ScriptManager.RegisterStartupScript(this, typeof(Page), "jsKeys", "javascript:Forzar();", true);
        }

        private void LimpiarFormulario()
        {
            txtNombreLaborPopup.Text = "";
            ddlCategoria.SelectedIndex = 0;
            ddlTipoLabor.SelectedIndex = 0;
            txtNivel.Text = "0";
            txtSeccion.Text = "0";
            ddlDireccion.SelectedIndex = 0;
            ddlZona.SelectedIndex = 0;
            ddlCuerpo.SelectedIndex = 0;
        }

        private void DireccionListar()
        {
            var oBLParametros = new BLParametros();
            var oListaDireccion = oBLParametros.ParametrosListar(new BEParametros
            {
                CodigoTabla = Convert.ToInt32(Tablas.Direccion)
            });

            ControlDataBind(oListaDireccion, ddlDireccion, "CodigoParametro", "Descripcion", true);
        }

        private void ZonaListar()
        {
            var oBLZona = new BLZona();
            var oListaTomador = oBLZona.ZonaListar();

            ControlDataBind(oListaTomador, ddlZona, "CodigoZona", "Descripcion", true);
        }

        private void TipoLaborListar()
        {
            var oBLTipoLabor = new BLTipoLabor();
            var oListaTomador = oBLTipoLabor.TipoLaborListar();

            ControlDataBind(oListaTomador, ddlTipoLabor, "CodigoTipoLabor", "Nombre", true);
        }

        private void CategoriaListar()
        {
            var oBLCategoriaLabor = new BLCategoriaLabor();
            var oListaCategoria = oBLCategoriaLabor.CategoriaLaborListar();

            ControlDataBind(oListaCategoria, ddlCategoria, "CodigoCategoriaLabor", "Descripcion", true);
        }

        private void CuerpoListar()
        {
            var oBLCuerpo = new BLCuerpo();
            var oListaCuerpo = oBLCuerpo.CuerpoListar();

            ControlDataBind(oListaCuerpo, ddlCuerpo, "CodigoCuerpo", "Descripcion", true);
        }

        private string Validar()
        {
            string oMensaje = String.Empty;

            if (ddlCategoria.SelectedIndex == 0)
                oMensaje = oMensaje + "-Categoria" + " \\n";

            if (ddlTipoLabor.SelectedIndex == 0)
                oMensaje = oMensaje + "-Tipo Labor" + " \\n";

            if (ddlDireccion.SelectedIndex == 0)
                oMensaje = oMensaje + "-Direccion" + " \\n";

            if (ddlZona.SelectedIndex == 0)
                oMensaje = oMensaje + "-Zona" + " \\n";

            if (ddlCuerpo.SelectedIndex == 0)
                oMensaje = oMensaje + "-Cuerpo" + " \\n";

            if (txtNivel.Text == "0")
                oMensaje = oMensaje + "-Nivel" + " \\n";

            if (txtSeccion.Text == "0")
                oMensaje = oMensaje + "-Seccion" + " \\n";

            if (txtSeccion.Text.Length != 3)
                oMensaje = oMensaje + "-Seccion (3 dígitos)" + " \\n";

            if (oMensaje.Length > 0)
                oMensaje = "Ingresar los siguientes campos:" + " \\n" + oMensaje;

            return oMensaje;
        }

        private void Exportar()
        {
            Response.Clear();
            Response.Buffer = true;
            Response.AddHeader("content-disposition", "attachment;filename=LaborMinera.xls");
            Response.Charset = "";
            Response.ContentType = "application/vnd.ms-excel";
            using (StringWriter sw = new StringWriter())
            {
                HtmlTextWriter hw = new HtmlTextWriter(sw);

                //To Export all pages
                gvLaborMinera.AllowPaging = false;
                this.LaborMineraListar();

                gvLaborMinera.HeaderRow.BackColor = Color.White;
                foreach (TableCell cell in gvLaborMinera.HeaderRow.Cells)
                {
                    cell.BackColor = gvLaborMinera.HeaderStyle.BackColor;
                }
                foreach (GridViewRow row in gvLaborMinera.Rows)
                {
                    row.BackColor = Color.White;
                    foreach (TableCell cell in row.Cells)
                    {
                        if (row.RowIndex % 2 == 0)
                        {
                            cell.BackColor = gvLaborMinera.AlternatingRowStyle.BackColor;
                        }
                        else
                        {
                            cell.BackColor = gvLaborMinera.RowStyle.BackColor;
                        }
                        cell.CssClass = "textmode";
                    }
                }

                gvLaborMinera.RenderControl(hw);

                //style to format numbers to string
                string style = @"<style> .textmode { } </style>";
                Response.Write(style);
                Response.Output.Write(sw.ToString());
                Response.Flush();
                Postback();
                Response.End();

            }
        }

        private string GenerarNombreLabor()
        {
            string nombreGenerado = string.Empty;
            string _tipolabor = string.Empty;
            string _nivel = string.Empty;
            string _seccion = string.Empty;
            string _direccion = string.Empty;

            //TIPO LABOR
            if (ddlTipoLabor.SelectedIndex != 0)
            {
                if (ddlTipoLabor.SelectedValue == Convert.ToInt32(TipoLabor.Galeria).ToString())
                    _tipolabor = Galeria;

                if (ddlTipoLabor.SelectedValue == Convert.ToInt32(TipoLabor.Rampa).ToString())
                    _tipolabor = Rampa;

                if (ddlTipoLabor.SelectedValue == Convert.ToInt32(TipoLabor.Crucero).ToString())
                    _tipolabor = Crucero;

                if (ddlTipoLabor.SelectedValue == Convert.ToInt32(TipoLabor.Subnivel).ToString())
                    _tipolabor = Subnivel;

                if (ddlTipoLabor.SelectedValue == Convert.ToInt32(TipoLabor.Ventana).ToString())
                    _tipolabor = Ventana;

                if (ddlTipoLabor.SelectedValue == Convert.ToInt32(TipoLabor.Estocada).ToString())
                    _tipolabor = Estocada;

                if (ddlTipoLabor.SelectedValue == Convert.ToInt32(TipoLabor.Tajo).ToString())
                    _tipolabor = Tajo;
            }

            //NIVEL
            _nivel = txtNivel.Text;

            //SECCION
            _seccion += txtSeccion.Text;

            //DIRECCION
            if (ddlDireccion.SelectedIndex != 0)
            {
                if (ddlDireccion.SelectedValue == Convert.ToInt32(Direccion.Norte).ToString())
                    _direccion = Norte;

                if (ddlDireccion.SelectedValue == Convert.ToInt32(Direccion.Sur).ToString())
                    _direccion = Sur;

                if (ddlDireccion.SelectedValue == Convert.ToInt32(Direccion.Este).ToString())
                    _direccion = Este;

                if (ddlDireccion.SelectedValue == Convert.ToInt32(Direccion.Oeste).ToString())
                    _direccion = Oeste;
            }

            nombreGenerado = _tipolabor + " " + _nivel + "-" + _seccion + " " + _direccion;

            return nombreGenerado;
        }

        #endregion

    }
}